This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

library(tidyverse)
── Attaching packages ───────────────────────────────────────────────────── tidyverse 1.2.1 ──
✔ tibble  2.1.3     ✔ purrr   0.3.2
✔ tidyr   0.8.3     ✔ stringr 1.4.0
✔ readr   1.3.1     ✔ forcats 0.4.0
── Conflicts ──────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ lubridate::as.difftime() masks base::as.difftime()
✖ dplyr::between()         masks data.table::between()
✖ tidyr::complete()        masks RCurl::complete()
✖ lubridate::date()        masks base::date()
✖ dplyr::filter()          masks plotly::filter(), stats::filter()
✖ dplyr::first()           masks data.table::first()
✖ lubridate::hour()        masks data.table::hour()
✖ lubridate::intersect()   masks base::intersect()
✖ lubridate::isoweek()     masks data.table::isoweek()
✖ dplyr::lag()             masks stats::lag()
✖ dplyr::last()            masks data.table::last()
✖ lubridate::mday()        masks data.table::mday()
✖ lubridate::minute()      masks data.table::minute()
✖ lubridate::month()       masks data.table::month()
✖ lubridate::quarter()     masks data.table::quarter()
✖ lubridate::second()      masks data.table::second()
✖ lubridate::setdiff()     masks base::setdiff()
✖ purrr::transpose()       masks data.table::transpose()
✖ lubridate::union()       masks base::union()
✖ lubridate::wday()        masks data.table::wday()
✖ lubridate::week()        masks data.table::week()
✖ lubridate::yday()        masks data.table::yday()
✖ lubridate::year()        masks data.table::year()
library(neonUtilities)
library(phenocamapi)
library(lubridate)
library(jpeg)
library(phenocamr)
library(plotly)
sites <- c("ONAQ", "HARV", "CPER", "OSBS")
## from tutorial https://www.neonscience.org/eddy-data-intro
# zipsByProduct(dpID="DP4.00200.001", package="basic", 
#               site=sites, 
#               #startdate="2018-06", enddate="2018-07",
#               savepath="/data", 
#               check.size=F)
# 
# flux_dpid <- "DP4.00200.001"
# flux <- stackEddy(filepath=paste0(getwd(), "/neonsummit/data/filesToStack00200"),
#                   level="dp04")
# phe_dpid <- 'DP1.10055.001'
# zipsByProduct(dpID='DP1.10055.001', package ="basic",
#               site=sites,
#               savepath="data",
#               check.size = F)
# 
# stackByTable(phe_dpid, filepath=paste0(getwd(), "/filesToStack10055"),
#              savepath = paste0(getwd(), "/filesToStack10055"), folder=T,
#              saveUnzippedFiles = FALSE)  #phe data
#### save locally, cannot push to git too big  #####
statusIntensity <- read.csv(paste0(getwd(),'/stackedFiles/phe_statusintensity.csv'),
                   stringsAsFactors = F, header = T)
perind <- read.csv(paste0(getwd(), '/stackedFiles/phe_perindividual.csv'),
                            stringsAsFactors = F, header = T)
#Format dates
statusIntensity$date <- as.Date(statusIntensity$date, "%Y-%m-%d")
statusIntensity$editedDate <- as.Date(statusIntensity$editedDate, "%Y-%m-%d")
statusIntensity$dayOfYear <- yday(statusIntensity$date)
statusIntensity$year <- substr(statusIntensity$date, 1, 4)
statusIntensity$monthDay <- format(statusIntensity$date, format="%m-%d")
#remove duplicate records
statusIntensity <- select(statusIntensity, -uid)
statusIntensity <- distinct(statusIntensity)
si_last <- statusIntensity %>%
  group_by(individualID, date, phenophaseName) %>%
  filter(editedDate==max(editedDate))
perind <- select(perind, individualID, growthForm, taxonID, editedDate)
perind <- distinct(perind)
ind_last <- perind %>%
  group_by(individualID) %>%
  filter(editedDate==max(editedDate))
ind_last <- select(ind_last, -editedDate)
si_last <- left_join(si_last, ind_last)
Joining, by = "individualID"
df <- filter(si_last, 
             siteID%in%c('HARV', 'OSBS', 'ONAQ')
             & year>2015
             & phenophaseStatus=='yes' 
             #& taxonID%in%c('QUFA', 'QULA2')
             #& growthForm=='Deciduous broadleaf'
             & phenophaseName%in%c('Breaking leaf buds', 'Initial growth', 'Emerging needles') 
             #& phenophaseIntensity !=""
)
df_out <- df%>%
  group_by(siteID, taxonID, date)%>%
  summarise(count=n())%>%
  arrange(date)
ggplot(df_out, aes(x=date, y=count)) +
                   #, group=taxonID)) +
  geom_line(aes(color=siteID), size=1)+
  ylim(0, 30)+
  facet_grid(siteID ~ .)
ggsave('SpringPhe_inSitu.png')
Saving 7.1 x 4.39 in image

p = plot_ly() %>%
  add_trace(
  data = df_out[df_out$siteID=='HARV',],
  x = ~ date,
  y = ~ count,
  name = 'HARV',
  showlegend = TRUE,
  type = 'scatter',
  mode = 'marker'
)
p2 =  plot_ly() %>%
  add_trace(
  data = df_out[df_out$siteID=='OSBS',],
  x = ~ date,
  y = ~ count,
  name = 'OSBS',
  showlegend = TRUE,
  type = 'scatter',
  mode = 'marker'
)
p3 = plot_ly() %>%
  add_trace(
  data = df_out[df_out$siteID=='ONAQ',],
  x = ~ date,
  y = ~ count,
  name = 'ONAQ',
  showlegend = TRUE,
  type = 'scatter',
  mode = 'marker'
)
p_all <- subplot(p, p2, p3, nrows = 3)
p_all

## can't figure out how to save as .png ###
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIAoKYGBge3J9CgpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShuZW9uVXRpbGl0aWVzKQpsaWJyYXJ5KHBoZW5vY2FtYXBpKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShqcGVnKQpsaWJyYXJ5KHBoZW5vY2FtcikKbGlicmFyeShwbG90bHkpCgpgYGAKCgoKYGBge3Igc2VsZWN0IHNpdGVzIHRvIHB1bGx9CgpzaXRlcyA8LSBjKCJPTkFRIiwgIkhBUlYiLCAiQ1BFUiIsICJPU0JTIikKCmBgYAoKYGBge3IgcHVsbCBmbHV4IGRhdGF9CiMjIGZyb20gdHV0b3JpYWwgaHR0cHM6Ly93d3cubmVvbnNjaWVuY2Uub3JnL2VkZHktZGF0YS1pbnRybwoKIyB6aXBzQnlQcm9kdWN0KGRwSUQ9IkRQNC4wMDIwMC4wMDEiLCBwYWNrYWdlPSJiYXNpYyIsIAojICAgICAgICAgICAgICAgc2l0ZT1zaXRlcywgCiMgICAgICAgICAgICAgICAjc3RhcnRkYXRlPSIyMDE4LTA2IiwgZW5kZGF0ZT0iMjAxOC0wNyIsCiMgICAgICAgICAgICAgICBzYXZlcGF0aD0iL2RhdGEiLCAKIyAgICAgICAgICAgICAgIGNoZWNrLnNpemU9RikKIyAKIyBmbHV4X2RwaWQgPC0gIkRQNC4wMDIwMC4wMDEiCiMgZmx1eCA8LSBzdGFja0VkZHkoZmlsZXBhdGg9cGFzdGUwKGdldHdkKCksICIvbmVvbnN1bW1pdC9kYXRhL2ZpbGVzVG9TdGFjazAwMjAwIiksCiMgICAgICAgICAgICAgICAgICAgbGV2ZWw9ImRwMDQiKQoKYGBgCgoKYGBge3IgcHVsbCBhbiBsb2FkIGluLXNpdHUgcGhlbm9sb2d5IGRhdGF9CgojIHBoZV9kcGlkIDwtICdEUDEuMTAwNTUuMDAxJwojIHppcHNCeVByb2R1Y3QoZHBJRD0nRFAxLjEwMDU1LjAwMScsIHBhY2thZ2UgPSJiYXNpYyIsCiMgICAgICAgICAgICAgICBzaXRlPXNpdGVzLAojICAgICAgICAgICAgICAgc2F2ZXBhdGg9ImRhdGEiLAojICAgICAgICAgICAgICAgY2hlY2suc2l6ZSA9IEYpCiMgCiMgc3RhY2tCeVRhYmxlKHBoZV9kcGlkLCBmaWxlcGF0aD1wYXN0ZTAoZ2V0d2QoKSwgIi9maWxlc1RvU3RhY2sxMDA1NSIpLAojICAgICAgICAgICAgICBzYXZlcGF0aCA9IHBhc3RlMChnZXR3ZCgpLCAiL2ZpbGVzVG9TdGFjazEwMDU1IiksIGZvbGRlcj1ULAojICAgICAgICAgICAgICBzYXZlVW56aXBwZWRGaWxlcyA9IEZBTFNFKSAgI3BoZSBkYXRhCgojIyMjIHNhdmUgbG9jYWxseSwgY2Fubm90IHB1c2ggdG8gZ2l0IHRvbyBiaWcgICMjIyMjCgpzdGF0dXNJbnRlbnNpdHkgPC0gcmVhZC5jc3YocGFzdGUwKGdldHdkKCksJy9zdGFja2VkRmlsZXMvcGhlX3N0YXR1c2ludGVuc2l0eS5jc3YnKSwKICAgICAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGLCBoZWFkZXIgPSBUKQoKcGVyaW5kIDwtIHJlYWQuY3N2KHBhc3RlMChnZXR3ZCgpLCAnL3N0YWNrZWRGaWxlcy9waGVfcGVyaW5kaXZpZHVhbC5jc3YnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGLCBoZWFkZXIgPSBUKQoKYGBgCgpgYGB7ciBkZWFsIHdpdGggZGF0ZSBmb3JtYXR0aW5nfQoKI0Zvcm1hdCBkYXRlcwoKc3RhdHVzSW50ZW5zaXR5JGRhdGUgPC0gYXMuRGF0ZShzdGF0dXNJbnRlbnNpdHkkZGF0ZSwgIiVZLSVtLSVkIikKc3RhdHVzSW50ZW5zaXR5JGVkaXRlZERhdGUgPC0gYXMuRGF0ZShzdGF0dXNJbnRlbnNpdHkkZWRpdGVkRGF0ZSwgIiVZLSVtLSVkIikKc3RhdHVzSW50ZW5zaXR5JGRheU9mWWVhciA8LSB5ZGF5KHN0YXR1c0ludGVuc2l0eSRkYXRlKQpzdGF0dXNJbnRlbnNpdHkkeWVhciA8LSBzdWJzdHIoc3RhdHVzSW50ZW5zaXR5JGRhdGUsIDEsIDQpCnN0YXR1c0ludGVuc2l0eSRtb250aERheSA8LSBmb3JtYXQoc3RhdHVzSW50ZW5zaXR5JGRhdGUsIGZvcm1hdD0iJW0tJWQiKQoKYGBgCgpgYGB7ciBkZWFsIHdpdGggcGhlIGR1cGxpY2F0ZXN9CiNyZW1vdmUgZHVwbGljYXRlIHJlY29yZHMKc3RhdHVzSW50ZW5zaXR5IDwtIHNlbGVjdChzdGF0dXNJbnRlbnNpdHksIC11aWQpCgpzdGF0dXNJbnRlbnNpdHkgPC0gZGlzdGluY3Qoc3RhdHVzSW50ZW5zaXR5KQoKc2lfbGFzdCA8LSBzdGF0dXNJbnRlbnNpdHkgJT4lCiAgZ3JvdXBfYnkoaW5kaXZpZHVhbElELCBkYXRlLCBwaGVub3BoYXNlTmFtZSkgJT4lCiAgZmlsdGVyKGVkaXRlZERhdGU9PW1heChlZGl0ZWREYXRlKSkKCgpgYGAKCgoKCgpgYGB7ciBqb2luIHBlcmluZCBhbmQgc3RhdHVzaW50ZW5zaXR5IGRmc30KCnBlcmluZCA8LSBzZWxlY3QocGVyaW5kLCBpbmRpdmlkdWFsSUQsIGdyb3d0aEZvcm0sIHRheG9uSUQsIGVkaXRlZERhdGUpCnBlcmluZCA8LSBkaXN0aW5jdChwZXJpbmQpCgppbmRfbGFzdCA8LSBwZXJpbmQgJT4lCiAgZ3JvdXBfYnkoaW5kaXZpZHVhbElEKSAlPiUKICBmaWx0ZXIoZWRpdGVkRGF0ZT09bWF4KGVkaXRlZERhdGUpKQoKaW5kX2xhc3QgPC0gc2VsZWN0KGluZF9sYXN0LCAtZWRpdGVkRGF0ZSkKCnNpX2xhc3QgPC0gbGVmdF9qb2luKHNpX2xhc3QsIGluZF9sYXN0KQoKYGBgCgoKCmBgYHtyIHBsb3Qgc3R1ZmZ9CgpkZiA8LSBmaWx0ZXIoc2lfbGFzdCwgCiAgICAgICAgICAgICBzaXRlSUQlaW4lYygnSEFSVicsICdPU0JTJywgJ09OQVEnKQogICAgICAgICAgICAgJiB5ZWFyPjIwMTUKICAgICAgICAgICAgICYgcGhlbm9waGFzZVN0YXR1cz09J3llcycgCiAgICAgICAgICAgICAjJiB0YXhvbklEJWluJWMoJ1FVRkEnLCAnUVVMQTInKQogICAgICAgICAgICAgIyYgZ3Jvd3RoRm9ybT09J0RlY2lkdW91cyBicm9hZGxlYWYnCiAgICAgICAgICAgICAmIHBoZW5vcGhhc2VOYW1lJWluJWMoJ0JyZWFraW5nIGxlYWYgYnVkcycsICdJbml0aWFsIGdyb3d0aCcsICdFbWVyZ2luZyBuZWVkbGVzJykgCiAgICAgICAgICAgICAjJiBwaGVub3BoYXNlSW50ZW5zaXR5ICE9IiIKKQoKCmRmX291dCA8LSBkZiU+JQogIGdyb3VwX2J5KHNpdGVJRCwgdGF4b25JRCwgZGF0ZSklPiUKICBzdW1tYXJpc2UoY291bnQ9bigpKSU+JQogIGFycmFuZ2UoZGF0ZSkKCmdncGxvdChkZl9vdXQsIGFlcyh4PWRhdGUsIHk9Y291bnQpKSArCiAgICAgICAgICAgICAgICAgICAjLCBncm91cD10YXhvbklEKSkgKwogIGdlb21fbGluZShhZXMoY29sb3I9c2l0ZUlEKSwgc2l6ZT0xKSsKICB5bGltKDAsIDMwKSsKICBmYWNldF9ncmlkKHNpdGVJRCB+IC4pCgpnZ3NhdmUoJ1NwcmluZ1BoZV9pblNpdHUucG5nJykKCgpwID0gcGxvdF9seSgpICU+JQogIGFkZF90cmFjZSgKICBkYXRhID0gZGZfb3V0W2RmX291dCRzaXRlSUQ9PSdIQVJWJyxdLAogIHggPSB+IGRhdGUsCiAgeSA9IH4gY291bnQsCiAgbmFtZSA9ICdIQVJWJywKICBzaG93bGVnZW5kID0gVFJVRSwKICB0eXBlID0gJ3NjYXR0ZXInLAogIG1vZGUgPSAnbWFya2VyJwopCnAyID0gIHBsb3RfbHkoKSAlPiUKICBhZGRfdHJhY2UoCiAgZGF0YSA9IGRmX291dFtkZl9vdXQkc2l0ZUlEPT0nT1NCUycsXSwKICB4ID0gfiBkYXRlLAogIHkgPSB+IGNvdW50LAogIG5hbWUgPSAnT1NCUycsCiAgc2hvd2xlZ2VuZCA9IFRSVUUsCiAgdHlwZSA9ICdzY2F0dGVyJywKICBtb2RlID0gJ21hcmtlcicKKQpwMyA9IHBsb3RfbHkoKSAlPiUKICBhZGRfdHJhY2UoCiAgZGF0YSA9IGRmX291dFtkZl9vdXQkc2l0ZUlEPT0nT05BUScsXSwKICB4ID0gfiBkYXRlLAogIHkgPSB+IGNvdW50LAogIG5hbWUgPSAnT05BUScsCiAgc2hvd2xlZ2VuZCA9IFRSVUUsCiAgdHlwZSA9ICdzY2F0dGVyJywKICBtb2RlID0gJ21hcmtlcicKKQoKcF9hbGwgPC0gc3VicGxvdChwLCBwMiwgcDMsIG5yb3dzID0gMykKcF9hbGwKCiMjIGNhbid0IGZpZ3VyZSBvdXQgaG93IHRvIHNhdmUgYXMgLnBuZyAjIyMKCmBgYAo=